package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.entity.ConstructionProjectItemDO;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 施工事项Mapper接口
 * 继承BaseMapper后，无需手动编写基础CRUD方法（如insert、updateById、selectById等）
 */
public interface ConstructionItemMapper extends BaseMapper<ConstructionProjectItemDO> {

    /**
     * 1. 按阶段ID查询事项列表（含状态筛选）
     * @param stageId 阶段ID
     * @param statusList 状态列表（如[0,1]表示查询未开始+进行中）
     * @return 符合条件的事项列表
     */
    List<ConstructionProjectItemDO> selectByStageIdAndStatus(
            @Param("stageId") Long stageId,
            @Param("statusList") List<Integer> statusList
    );

    /**
     * 2. 查询项目下的逾期事项（未完成且已超结束时间）
     * @param projectId 项目ID
     * @param currentTime 当前时间（用于判断是否逾期）
     * @return 逾期事项列表
     */
    List<ConstructionProjectItemDO> selectOverdueItems(
            @Param("projectId") Long projectId,
            @Param("currentTime") LocalDateTime currentTime
    );

    /**
     * 3. 批量更新事项的阶段ID（用于阶段调整场景）
     * @param oldStageId 原阶段ID
     * @param newStageId 新阶段ID
     * @param projectId 项目ID（防跨项目修改）
     * @return 更新条数
     */
    int batchUpdateStageId(
            @Param("oldStageId") Long oldStageId,
            @Param("newStageId") Long newStageId,
            @Param("projectId") Long projectId
    );

    /**
     * 4. 统计阶段下各状态的事项数量（用于阶段进度计算）
     * @param stageId 阶段ID
     * @return 状态统计（key：status，value：count），示例：{0:2, 1:3, 2:5}
     */
    List<ItemStatusCountVO> countStatusByStageId(@Param("stageId") Long stageId);

    // ==================== 内部VO：用于状态统计结果封装 ====================
    interface ItemStatusCountVO {
        /** 事项状态（0-未开始，1-进行中，2-已完成） */
        Integer getStatus();
        /** 该状态的事项数量 */
        Integer getCount();
    }
}